<?php

namespace app\api\controller;

use app\api\service\Dish as DishService;
use app\common\controller\Api;
use think\Cache;
use think\exception\ValidateException;

/**
 * 菜品接口
 */
class Dish extends Api
{
    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['list'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = '*';

    /**
     * 根据分类id查询菜品
     *
     */
    public function list()
    {
        $data = $this->request->get();
        // 参数校验
        $validate  = validate('Dish');
        if (!$validate->scene('list')->check($data)) {
            // 抛出验证异常
            throw new ValidateException($validate->getError());
        }

        $categoryId = $data['categoryId'];
        // 构建redis缓存key，规则为：dish_分类id
        $key = 'dish_' . $categoryId;

        //查询redis中是否有缓存数据
        // 尝试获取缓存
        $cachedData = Cache::store('redis')->get($key);
        if ($cachedData !== false) {
            $list = json_decode($cachedData, true); // 注意：添加true参数确保返回数组
            // 直接返回成功响应并终止流程
            return $this->success('返回成功', $list);
        }
        $dishService = new DishService;
        $list = $dishService->listWithFlavor($data);

        // 将查询到的数据载入缓存
        Cache::store('redis')->set($key, json_encode($list));

        // 返回数据库查询结果
        return $this->success('返回成功', $list);
    }
}
